git与svn区别,git可以是分布式，存放在本地,svn需要服务器
git配置
git config --global user.name ft
git config --global user.email ft@qq.com
git config --global color.ui true
提交的时候就知道是谁提交的了,最后的一个是配置颜色
git config --list   以上所有的配置，实际上对一个配置文件进行了操作,这个文件就是
cat ~/.gitconfig
可修改 vi ~/.gitconfig
       user.eamil admin@qq.com  以上邮箱就修改了
git config --list  
===================================================================================
repository(两种方式)
1. 在意文件夹下(xiao1) 输入命令 git init() 即可
ls -A 可查看.git（后续讲解）

2.克隆方式
git clone https://github.com/ft/ft.git 从网上下载数据
ls当前文件夹就会有文件
两种不同的方式.git 文件都是相同的

=======================================================================
添加及提交文件
git status 查看状态
readme.txt（没上户口）
红色还没添加,使用git add readme.text 提交
颜色就会变成绿色
使用git commit -m  '提交信息'   不加 -m 在linux下会打开vi编辑器
此时git status 就会产生 working directory
详细研究 working directory
 
 绿框  History （在篮框里执行git add 之后 执行git commit）
                         /|\
                          |git commit
                          |
                          |
 篮框  staging area （工作区文件或者文件夹运行git add 就会放到这里）
 (别名Index 或 cache)    /|\
                          | git add
                          |
                          |
 红框  working directory（工作区）



 ======================================================================================
 修改文件readme.txt
 添加一行 print "hello git";执行git.status 就会产生untracked files
 多出一个 .code.py.un~ 多出了一个隐藏文件，想忽略的话，就可以忽略以波浪线结尾的文件
 输入代码
      echo '*~' > .gitignore 就会保存一个文件,波浪线文件就不见了，git add .gitignore 添加到git
      not staged 修改没放进去产生的结果
      git status -s 简单状态信息（两个标志符号）A后面一个空格，M前面一个空格
      A   .gitignore   A的意思是stanging area 添加了什么东西，做了哪些改变(add)，空格表示working direcotry没有发生改变 
       M  code.py      空格的意思是stagning area 没有改变，后面M 表示working directory发生变化

      git commit -m 'ok'    文件都相同了
==============================================================================
查看文件差别
git diff  文件发生了什么变化(加一行，少一行)，working director和staging area 区别
git diff --staged 可以查看staging area 与history 里发生的变化
git diff HEAD  直接history 和working direcoty区别,HEAD 最前面的东西,是history里的东西
git diff  --stat HEAD             
可相互查看     

==============================================================
撤销错误操作哦
例如working 无意填到stange，可以从history拿出
git reset code.ph  从history里拿出重新覆盖到当前状态
从stange 覆盖到working命令是这样的
git checkout code.py
从history到working 覆盖命令是这样的
git checkout HEAD code.py    回到原始状态


提交的时候可以直接从working 到history
git commit -am 'new ,hello'

========================================================================
移出以及重命名文件
git remove code.py 
git.status就会产生 deleted:文件
D 表示被删除
git rm --cached code.py  删除stange 里的，其他不删
撤销: git reset code.py 


1. git mv code.py code.ppy   重新修改文件名
2. git rm --cached code.py
   mv code.py code.pyy
   git add code.pyy
git并不会把文件名和文件内容进行绑定，文件内容相同，文件名不同就会推断重命名

================================================================
暂存工作区 两种修改
对code.py修改之后,还没有进行add
    print '你好' 就会出现
在 hello 后面添加感叹号 ！
添加一行代码   
git stash 把桌面上东西收拾下 ，放进抽屉里,回到原始状态
感叹号没了，重新加感叹号!

git commit -am '紧急修复'
git status --list 
git stash pop 展开 ,就会回复到以前的状态
    print '你好' 就会出现

 ==========================================================
history 内容(完整的叫commit history)
目录树
commit对象指向了一个tree,parent 从后一个指向前一个commit
tree对象可以指向blog,另外一个tree
HEAD 指向最新的一个 master ->commit
使用HEAD~ 波浪线 HEAD~4  == HEAD~~~~

git log 历史记录
git cat-file - t HEAD指向那一个对象  
git cat-file - p HEAD指向那一个对象（详细）  

==========================================================
 创建以及删除分支
git branch   列出所有的分支
git branch tryidea  创建分支
git checkout tryidea  切换分支
git branch -d tryidea 删除他


==========================================================
合并分支
git checkout -b xxx 创建完分支之后立马切换
在这分支上直接开发

git merge tryidea 合并两个分支一起
HEAD->master




















































































